package com.example.batchdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * TODO   其实无论哪种方案，最终目的都是修改响应头，向响应头中添加浏览器所要求的数据，进而实现跨域。
 *        第一种解决跨域 - 返回新的 CorsFilter(全局跨域)  ---  打为war包失效
 *
 * @ClassName TsetCorsConfig
 * @Author xiaojiang
 * @Date 2022/2/24 下午 17:43
 */
@Configuration
public class CorsConfigOne {

    // 在任意配置类，返回一个 新的 CorsFIlter Bean ，并添加映射路径和具体的CORS配置路径。
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        // 设置你要允许的网站域名  / 放行哪些原始域 可以为 *
        config.addAllowedOrigin("http://localhost:8080");
        // 允许跨域发送cookie
        config.setAllowCredentials(true);
        // 放行全部原始头信息
        config.addAllowedHeader("*");
        // 允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        // 暴露哪些头部信息
        config.addExposedHeader("*");
        //2. 添加映射路径
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        //3. 返回新的CorsFilter
        return new CorsFilter(source);
    }
}
